#!/bin/bash
# upperconv.sh
# Преобразование символов во входном файле в верхний регистр.

E_FILE_ACCESS=70
E_WRONG_ARGS=71

if [ ! -r "$1" ]; then # Файл доступен для чтения?
    echo "Невозможно прочитать из заданного файла!"
    echo "Порядок использования: $0 input-file output-file"
    return $E_FILE_ACCESS
fi #  В случае, если входной файл ($1) не задан
#+ код завершения будет этим же.

if [ -z "$2" ]; then
    echo "Необходимо задать выходной файл."
    echo "Порядок использования: $0 input-file output-file"
    return $E_WRONG_ARGS
fi

exec 4<&0
exec <$1 # Назначить ввод из входного файла.

exec 7>&1
exec >$2 # Назначить вывод в выходной файл.
# Предполагается, что выходной файл доступен для записи
# (добавить проверку?).

# -----------------------------------------------
cat - | tr a-z A-Z # Перевод в верхний регистр
#   ^^^^^                # Чтение со stdin.
#           ^^^^^^^^^^   # Запись в stdout.
# Однако, и stdin и stdout были перенаправлены.
# -----------------------------------------------

exec 1>&7 7>&- # Восстановить stdout.
exec 0<&4 4<&- # Восстановить stdin.

# После восстановления, следующая строка выводится на stdout, чего и следовало ожидать.
echo "Символы из \"$1\" преобразованы в верхний регистр, результат записан в \"$2\"."
